#/usr/bin/perl
#ce script récupère les dexcritpions et titres
#on sépare les tâches pour en faire des fonctions indépendantes à appeler(ex filtrage). Il n'y a pour l'instant que sub filtrage. mais il y en aura d'autres comme le nettoyeur
#ici le problème est le nettoyage, il semble impossible de faire le sub sur une ligne et de renvoyer cette ligne pour l'imprimer !!
use strict;
use warnings;
<<DOC; 
Votre Nom : 
JANVIER 2005
 usage : perl parcours-arborescence-fichiers repertoire-a-parcourir
 Le programme prend en entrée le nom du répertoire contenant les fichiers
 à traiter
 Le programme construit en sortie un fichier structuré contenant sur chaque
 ligne le nom du fichier et le résultat du filtrage :
<FICHIER><NOM>du fichier</NOM></FICHIER><CONTENU>du filtrage</CONTENU></FICHIER>
DOC
#-----------------------------------------------------------
my $rep="$ARGV[0]";
# on s'assure que le nom du répertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//;
# on initialise une variable contenant le flux de sortie 
my $DUMPFULL1="";
#----------------------------------------
my $output1="SORTIE.xml";
if (!open (FILEOUT,">$output1")) { die "Pb a l'ouverture du fichier $output1"};
#----------------------------------------
open(OUT,">truc.txt");
&parcoursarborescencefichiers($rep);	#recurse! c'est une procedure qui demarre à partir de notre corpus 2008
close(OUT);
# c'est le noeud du programme!
#----------------------------------------
print FILEOUT "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n";
print FILEOUT "<PARCOURS>\n";
print FILEOUT "<NOM>Votre nom</NOM>\n";
print FILEOUT "<FILTRAGE>".$DUMPFULL1."</FILTRAGE>\n";
print FILEOUT "</PARCOURS>\n";
close(FILEOUT);
exit;
# écriture du fichier
#----------------------------------------------
sub parcoursarborescencefichiers {
    my $path = shift(@_); #vide la première ligne du tableau: "_" contient 2008
    opendir(DIR, $path) or die "can't open $path: $!\n";# definit un pointeur de repertoire
        #die permet de sortie: comme exit
    my @files = readdir(DIR); #lire le contenu du repertoire et utilise le poiteur du repertoire
    # renvoie une liste des elements constitutifs des éléments du repertoire= @files  
    closedir(DIR);
   
    foreach my $file (@files) { #chaque element de la liste:un traitement différent
	next if $file =~ /^\.\.?$/;# passer au suivant si le fichier n'existe pas
	$file = $path."/".$file; #éritage du chemin père
	if (-d $file) { #appliquer la fct si la ressource est un repertoire/un fichier: -d (applique à un repertoire), -f (un fichier)
	    &parcoursarborescencefichiers($file);	#recurse!
	}
	if (-f $file) {
		if ($file =~ /.*\.xml/) {
			# print "$file :",$i++,"\n";
			&filtrage($file);#	appel de filtrage		


                }
	}
    }
}

#----------------------------------------------
#       TRAITEMENT à réaliser sur chaque fichier
#       Insérer ici votre code (le filtreur)

sub filtrage{
#on renvoie la variable $file à l'entrée à l'appel de la fonction :
	my $file=shift;
                #_______ lecture _______#
                open(FILE,$file);
                while (my $ligne=<FILE>) {
			if ($ligne =~ /\<title\>(.+)\<\/title\>/) {
                                print "TITRE : $1 \n"; #$1 est le contenu de (,+)
                                my $titre = $1;#on met le contenu de la parenthèse dans une variable locale
                                $titre = &nettoietexte($titre);#on appelle la procédure qui va nettoyer le texte des titres de toutes ses entités
                                printf (OUT "TITRE : $titre \n"); #on imprime le texte renvoyé dans le doc texte.
                        }       
                        if ($ligne =~/\<description\>(.+)\<\/description\>/) {
                        	
                                print "DESCRIPTION : $1 \n"; #$1 est le contenu de (,+)
                                my $description = $1; #on met le contenu de la parenthèse dans une variable locale
                                $description = &nettoietexte($description);#on appelle la procédure qui va nettoyer le texte de toutes ses entités
                                printf (OUT "DESCRIPTION : $description\n");#on imprime le texte renvoyé dans le doc texte.
                                # printf (OUT &nettoyage("DESCRIPTION : $1 \n"));
                                }
			}
	    }
#-----------------------------------------------------------------------------------------------
#On crée la procédure "nettoyage"
sub nettoietexte {
    my $texte=shift;
    $texte =~ s/&lt;/</g;
    $texte =~ s/&gt;/>/g;
    $texte =~ s/<a href[^>]+>//g;
    $texte =~ s/<img[^>]+>//g;
    $texte =~ s/<\/a>//g;
    $texte =~ s/&#38;#39;/'/g;
    $texte =~ s/&#38;#34;/"/g;
    $texte =~ s/<[^>]+>//g;
    return $texte;
}
                #______fermeture_____#
               
close(FILE);